package com.warom.sdg.dao;

import com.warom.sdg.model.PlcDataEntity;

import java.util.List;

/**
 * PLC数据访问对象接口
 * 定义数据库操作方法
 */
public interface PlcDataDao {
    
    /**
     * 插入一条PLC数据记录
     * @param data PLC数据实体
     * @return 插入记录的ID
     */
    long insert(PlcDataEntity data);
    
    /**
     * 获取所有PLC数据记录
     * @return PLC数据列表
     */
    List<PlcDataEntity> getAllData();
    
    /**
     * 获取指定设备的所有数据
     * @param deviceId 设备ID
     * @return PLC数据列表
     */
    List<PlcDataEntity> getDataByDeviceId(int deviceId);
    
    /**
     * 获取指定名称的PLC数据
     * @param name 数据点名称
     * @return PLC数据列表
     */
    List<PlcDataEntity> getDataByName(String name);
    
    /**
     * 获取指定地址的PLC数据
     * @param address Modbus地址
     * @return PLC数据列表
     */
    List<PlcDataEntity> getDataByAddress(String address);
    
    /**
     * 获取指定设备和地址的PLC数据
     * @param deviceId 设备ID
     * @param address Modbus地址
     * @return PLC数据列表
     */
    List<PlcDataEntity> getDataByDeviceAndAddress(int deviceId, String address);
    
    /**
     * 获取指定类型的PLC数据
     * @param type 数据类型
     * @return PLC数据列表
     */
    List<PlcDataEntity> getDataByType(String type);
    
    /**
     * 获取指定地址的最新PLC数据
     * @param address Modbus地址
     * @return PLC数据实体，如果没有则返回null
     */
    PlcDataEntity getLatestDataByAddress(String address);
    
    /**
     * 获取指定设备和地址的最新PLC数据
     * @param deviceId 设备ID
     * @param address Modbus地址
     * @return PLC数据实体，如果没有则返回null
     */
    PlcDataEntity getLatestDataByDeviceAndAddress(int deviceId, String address);
    
    /**
     * 删除所有PLC数据
     */
    void deleteAll();
    
    /**
     * 删除指定时间之前的PLC数据
     * @param timestamp 时间戳
     */
    void deleteDataBefore(long timestamp);
    
    /**
     * 删除指定设备的所有数据
     * @param deviceId 设备ID
     */
    void deleteDataByDeviceId(int deviceId);
    
    /**
     * 获取指定设备、地址和时间范围的历史数据
     * @param deviceId 设备ID
     * @param address Modbus地址
     * @param startTime 开始时间戳
     * @param endTime 结束时间戳
     * @param limit 限制返回记录数
     * @return PLC数据列表
     */
    List<PlcDataEntity> getHistoryData(int deviceId, String address, long startTime, long endTime, int limit);
} 